XML در دات نت

ايجاد يک فايل

XML ، يک زبان نشانه گذاری است که امکانات گسترده ای به منظور تشريح اطلاعات را ارائه می نمايد . مولفين اسناد XML به منظور تشريح اطلاعات از تگ ها و خصلت های اختصاصی خود استفاده می نمايند. ( تگ از قبل تعريف شده ای وجود ندارد ) . تگ های موجود در يک سند XML با يکديگر ترکيب و به همراه مجموعه قوانينی که ارتباط بين آنان را مشخص می نمايد ، ارائه می گردند . به منظور تعريف قوانين فوق از( DTD ( Documet Type Definition و XML Schema استفاده می گردد .
XML در سال 1996 توسط کنسرسيوم وب ( گروه کاری XML ) پياده سازی شده است . استاندارد باز و مستقل از پلت فرم بودن از جمله مهمترين ويژگی های XML محسوب می گردد. XML از آن زمان تاکنون دستخوش تغييرات متعددی شده و از آن در ابعاد گسترده ای نظير ذخيره سازی داده های مورد نياز که می بايست بين برنامه ها منتقل گردند، استفاده می شود ( خصوصا" برنامه هائی که بر روی اينترنت اجراء می گردند ) .

XML در دات نت

XML دارای جايگاهی خاص در فريمورک دات نت است . فريمورک دات نت نه تنها امکان استفاده موثر از XML در برنامه ها را در اختيار شما قرار می دهد بلکه از آن در مواردی متعددی نظير فايل های پيکربندی ، سرويس های وب و ADO.NET نيز استفاده می گردد. فريمورک دات نت مجموعه ای گسترده از کلاس ها به منظور کار با اسناد XML را ارائه نموده است که جملگی از System.Xml مشتق می شوند . سه namespace زير ويژگی های اصلی XML در دات نت را ارائه می نمايند :
• System.Xml ، مهمترين namespace ارائه شده در دات نت می باشد که اشياء سازگار با نسخه XML کنسرسيوم وب و مجموعه ای از اشياء جانبی به منظور کار با اسناد XML را ارائه می نمايد .با استفاده از اشياء سازگار با XML ارائه شده توسط کنسرسيوم وب ، امکان دستيابی به گره های موجود در يک سند XML فراهم می گردد . در اين رابطه اشياء reader و writer به منظور دستيابی به فايل های XML موجود بر روی ديسک و کلاسی به منظور بررسی اعتبار اسناد XML در مقابل يک DTD و يا XML Schema ، ارائه شده است .
• System.Xml.XPath . با استفاده از XML Path Language) XPath )، امکان دستيابی و پردازش بخش هائی خاص ازيک سند XML فراهم می گردد. مثلا" می توان عبارت خاصی را ايجاد نمود که گره های خاصی را در يک سند XML و بر اساس نام ، نوع و يا مقدار پيدا نمايد . به عبارات فوق ، XPath Queries گفته می شود . namespace فوق مجموعه ای از اشياء Navigator به منظور انجام عمليات تکراری در يک سند XML را نيز ارائه نموده است . System.Xml.XPath اينترفيس DOM کنسرسيوم وب را حمايت نمی نمايد .
• System.Xml.Xsl .از ( XSL ( eXtensible Stylesheet Language به منظورتعريف فرمت مورد نظر برای داده های XML استفاده می گردد . کلاس فوق ، اشياء لازم به منظور تبديل اسناد XML که از آن با نام XSLT ياد می شود را نيز ارائه می نمايد . XSLT فرآيندی است که در آن با استفاده از يک سند XML ، اسناد مبتنی بر text ايجاد می گردند . namespace فوق ، همچنين يک کلاس به منظور پاس دادن آرگومان به يک XSLT Stylesheet برای تبديل شرطی را ارائه نموده است .
علاوه بر سه namespace اشاره شده از دو namespace ديگر به نام System.Xml.Schema و System.Xml.Serialization به منظور انجام عمليات خاص در ارتباط با استاد XML ، استفاده می شود .

ايجاد يک سند XML با استفاده از XmlTextWriter

از XmlTextWriter ، به منظور نوشتن داده در اسناد XML سازگار با استاندارد W3C XML 1.0 استفاده می شود . کلاس فوق اطلاعات را cache نکرده و از آن به منظور نوشتن داده در يک سند XML به صورت forward-only ، استفاده می گردد . XmlTextWriter نسبت به DOM دارای سرعت بمراتب بيشتری بوده و از حافظه کمتری استفاده می نمايد ( در هر لحظه يک گره در حافظه قرار می گيرد ) . کلاس فوق گره ها را يکی پس از ديگری ايجاد نموده و آنان را برای خروجی مورد نظر ارسال می نمايد ( يک Stream ، شی ديگر ويا يک فايل موجود بر روی ديسک ) .
جدول زير مهمترين متدهای اين کلاس را نشان می دهد :

کاربرد

متد

 از متد فوق به منظور شروع  يک سند XMLو درج اولين خط در آن که شامل معرفی فايل XMLو نحوه encodingاست ، استفاده می گردد.  

 WriteStartDocument()

 از متد فوق به منظور ايجاد يک عنصر جديد در سند XMLاستفاده می گردد . نام عنصر جديد توسط رشته ورودی مشخص می شود .

WriteStartElement(string)

از متد فوق به منظور ايجاد يک عنصر جديد در سند XMLاستفاده می گردد . نام عنصر جديد و مقدار متناظر با آن توسط پارامترهای ورودی مشخص می گردد.

WriteElementString(name, text_value)

 از متد فوق به منظور ايجاد يک خصلت و نسبت دهی مقدار مورد نظر به آن استفاده می شود . خصلت ايجاد شده به عنصر جاری سند XMLنسبت داده می شود .

WriteAttributeString(name, value)

 از متد فوق به منظور بستن عنصری که توسط  متد WriteStartElementايجاد شده است ، استفاده می گردد .

WriteEndElement()

 از متد فوق به منظور اتمام عمليات نوشتن در سند XMLاستفاده می گردد .

WriteEndDocument()

از متد فوق به منظور نوشتن محتوای سند XMLبه فايل مشخص شده در يک آدرس خاص، استفاده می گردد .

Close()

به منظور شروع کار با کلاس XmlTextWriter می بايست يک فايل و نحوه encoding آن مشخص گردد. encoding می بايست از نوع System.Text.Encoding باشد . ( مثلا" System.Text.Encoding.ASCII ، System.Text.Encoding.Unicode و يا System.Text.Encoding.UTF8 ) .

مثال : استفاده از XmlTextWriter به منظور ايجاد يک فايل XML

در اين مثال با استفاده از XmlTextWriter يک فايل XML با نام Visitors.xml و ساختار زير ايجاد می گردد .

 

<userInfo>
   <browserInfo>
      <urlReferrer>...</urlReferrer>
      <userAgent>...</userAgent>
      <userLanguages>...</userLanguages>
   </browserInfo>
  <visitInfo timeVisited>
    <ip>...</ip>
    <rawUrl>...</rawUrl>
    <totalbytes>...</totalbytes>
    <browsertype>...</browsertype>
    <contentEncoding>...</contentEncoding>
    <contentlength>...</contentlength>
    <httpmethod>...</httpmethod>
    <IsSecureConnection>...</IsSecureConnection>
    <RequestType>...</RequestType>
   </visitInfo>
</userInfo>

مرحله اول : تايپ کد زير با استفاده از يک ويرايشگر

<%@ Import Namespace="System.Xml" %>
<%@ Import Namespace="System.Text" %>

<script language="vb" runat="server">
Sub Page_Load()
Dim writer As XmlTextWriter
writer = new XmlTextWriter(Server.MapPath("Visitors.xml"), Encoding.UTF8)

writer.WriteStartDocument()
writer.WriteStartElement("userInfo")
writer.WriteStartElement("browserInfo")

if (Request.UrlReferrer is "") then
     writer.WriteElementString("urlReferrer", "none")
Else
   writer.WriteElementString("urlReferrer",Request.Url.Tostring())
End if


writer.WriteElementString("userAgent", Request.UserAgent)
writer.WriteElementString("userLanguages", String.Join(", ", Request.UserLanguages))
writer.WriteEndElement()

writer.WriteStartElement("visitInfo")
writer.WriteAttributeString("timeVisited", DateTime.Now.ToString())
writer.WriteElementString("ip", Request.UserHostAddress)
writer.WriteElementString("rawUrl", Request.RawUrl)
writer.WriteElementString("totalbytes", Request.TotalBytes)
writer.WriteElementString("browsertype", Request.Browser.Type)
writer.WriteElementString("contentEncoding", Request.ContentEncoding.EncodingName)
writer.WriteElementString("contentlength", Request.Contentlength)
writer.WriteElementString("httpmethod", Request.HttpMethod)
writer.WriteElementString("IsSecureConnection", Request.IsSecureConnection)
writer.WriteElementString("RequestType", Request.RequestType)

writer.WriteEndElement()
writer.WriteEndDocument()
writer.Close()
End Sub
</script>

خواندن يک فايل

به منظور دستيابی به محتوای يک سند XML ، می بايست آن را Parse نمود تا به بخش مورد نظر دست يافت . به نرم افزارهائی که امکان انجام چنين عملياتی را فراهم می نمايند ، "پارسر" گفته می شود . پارسرها دارای دو نوع متفاوت می باشند :
• پارسرهای ( DOM : ( Document Object Model ، يک ساختار درختی از سند XML را در حافظه ايجاد نموده و امکان حرکت بر روی گره ها و يا خصلت های متفاوتی را در اختيار قرار می دهند.
• پارسرهای ( SAX : ( Simple API for XML ، سندهای XML را به صورت ترتيبی پردازش نموده و نسبت به پارسرهای DOM حافظه بمرابت کمتری را اشغال می نمايند .
در MSXML ver 3.0 ، شرکت مايکروسافت دو پارسر فوق را ارائه نموده است . در دات نت نيز از پارسر DOM که دارای سازگاری و شباهت بسيار زيادی با MSXML است و پارسر SAX که دستخوش تغييرات متعددی نسبت به گذشته شده است ، استفاده می گردد . پارسرهای قبل از دات نت ، (مثلا" پارسر MSXML ) کلاس ها و اينترفيس های متعددی را به منظور انجام عمليات متقاوت بر روی اسناد XML ارائه نموده که با استاندارد پيشنهادی کنسرسيوم وب ، سازگاری و نزديکی قابل توجهی دارد. در دات نت علاوه بر استمرار وضعيت فوق ، روش های ساده و انعطاف پذيری به منظور کار بر روی اسناد XML ارائه شده است .
کلاس XmlTextReader
کلاس XmlTextReader روشی سريع و موثر به منظور parse نمودن اسناد XML را ارائه می نمايد. کلاس فوق از حافظه بطرز کاملا" حساب شده و بهينه ای استفاده می نمايد. صرفا" گره جاری در حافظه نگهداری می گردد ( Cached ) و عنصری که قبلا" parse شده است در حافظه وجود نخواهد داشت . در صورتی که به وجود عناصر قبلی نياز باشد ، می بايست فايل XML مجددا" از ابتدا و به صورت forward-only خوانده شود. کلاس فوق از XmlReader به ارث رسيده و متعلق به System.Xml می باشد .
با استفاده از متدها و خصلت های ارائه شده توسط کلاس فوق، می توان بسادگی به محتوا و عناصر موجود در يک سند XML دست يافت . متدهای ارائه شده همواره گره جاری را برمی گردانند و در ادامه می توان عمليات مورد نظر را بر روی آنان انجام داد .
به منظور استفاده از کلاس XmlTextReader می بايست از System.Xml استفاده و يک نمونه از کلاس فوق را ايجاد نمود .

 Dim reader As XmlTextReader  
 reader = New XmlTextReader ( Server.MapPath("visitors.xml") )

به منظور خواندن محتوای يک سند XML از متد Read و در يک ساختار تکرار استفاده می نمائيم .

Do while reader.read ()
     'عمليات مورد نظر
loop

در صورتی که يک گره با موفقيت خوانده شود، مقدار True برگردانده شده و در ادامه می توان با استفاده از متدها و خصلت های ارائه شده ، عمليات مورد نظر را انجام داد. بررسی نوع يک گره ، دستيابی به خصلت هائی خاص و يا محتوای يک گره نمونه هائی در اين زمينه می باشد .
جدول زير مهمترين متدها و خصلت های کلاس XmlReaderClass را نشان می دهد .

کاربرد

متد / خصلت

 متد فوق ، cursorرا بر روی گره بعدی قرار داده و درصورتی که  گره با موفقيت خوانده شود ، مقدار trueرا بر می گرداند . از متد فوق در يک ساختار تکرار و به منظور خواندن و انجام پردازش های لازم در خصوص اسناد XMLاستفاده می گردد .

   Read()

 خصلت فوق نوع گره را بر می گرداند ( المان ، متن و يا ساير موارد ).

  NodeType

خصلت فوق،  نام گره جاری را بر می گرداند .

  Name

 خصلت فوق ، محتوای گره را بر می گرداند .

  Value

 محتوای يک گره را بر اساس يک نوع داده خاص برمی گرداند. مثلا" متد ReadStringمحتوای يک گره را به صورت يک رشته برمی گرداند .

  ReadString(), Readxxxx()....

متد فوق ، مقدار خصلتی را که به عنوان پارامتر در اختيار آن گذاشته شده است ،  برمی گرداند .

  GetAttribute("attb_name")

در صورتی که گره ای  دارای يک خصلت باشد، مقدار trueو در غيراينصورت مقدار False، برگردانده می شود .

  HasAttributes

در اين مثال قصد داريم فايل Visitors.xml را که در مقاله "XML در دات نت : ايجاد يک فايل با نحوه ايجاد آن آشنا شديم را خوانده و عناصر موجود در آن را به همراه مقادير نسبت داده شده به هر يک در خروجی نمايش دهيم .

محتوای فايل Visitors.xml

<?xml version="1.0" encoding="utf-8"?>
<userInfo>
  <browserInfo>
      <urlReferrer>http://localhost/MakeXmlFile1.aspx</urlReferrer>
      <userAgent>Mozilla/4.0 (compatible; MSIE 6.0; ... </userAgent>
      <userLanguages>fa, en-us;q=0.5</userLanguages>
   </browserInfo>
  <visitInfo timeVisited="10/15/2004 2:18:27 AM"> <ip>127.0.0.1</ip>
      <rawUrl>/MakeXmlFile1.aspx</rawUrl>
      <totalbytes>0</totalbytes>
      <browsertype>IE6</browsertype>
      <contentEncoding>Unicode UTF-8)</contentEncoding>
      <contentlength>0</contentlength>
      <httpmethod>GET</httpmethod>
       <IsSecureConnection>False</IsSecureConnection>
       <RequestType>GET</RequestType>
   </visitInfo>
</userInfo>

مرحله اول : تايپ کد زير با استفاده از يک ويرايشگر

<%@ Import Namespace="System.Xml" %>
<%@ Import Namespace="System.Text" %>

<script runat="server">
 sub Page_Load(obj as object, e as eventargs)
  Dim reader As XmlTextReader

  Try
     reader = New XmlTextReader ( Server.MapPath("visitors.xml") )
     Dim strNodeResult As String =""
     Dim objNodeType As XmlNodeType

     Do while reader.read ()
         objNodeType = reader.NodeType
         Select Case objNodeType
           Case XmlNodeType.XmlDeclaration   strNodeResult + =" XML Declaration : <b>" &_
                reader.Name & " " & reader.Value & "</b><br /> "
           Case XmlNodeType.Element   strNodeResult + =" Element : <b>" &_
                reader.Name & "</b><br /> "
           Case XmlNodeType.Text   strNodeResult + =" &nbsp; - Value : <b>" &_
                reader.Value & "</b></p><br /> "
        End Select
    If reader.AttributeCount > 0 Then
        Do While reader.MoveToNextAttribute()
           strNodeResult += "&nbsp - Attribute : <b>" & _
           reader.name & "</b> &nbsp - Value  <b>" & reader.Value & "</b><br />"
        Loop
   End If
  Loop
LblMessage.Text =" <P Align=""Center"" dir =""rtl""> خواندن فايل<b>Visitors.xml</b>
LblFile.Text = strNodeResult

Catch objError As Exception
        LblMessage.Text = "<b>* بروز اشکال در خواندن فايل</b>.<br /> "   &_
            objError.Message & "<br /> " & objError.Source
       Exit Sub
 Finally
       If ( Not reader Is Nothing ) then
          reader.close
      End If
  End Try
 End Sub
</script>
<html dir >
<form Language="vb" runat="server" >
   <asp:label id="LblMessage" runat="server" />
   <asp:label id="LblFile" runat="server" />
</form>
</html>

تبديل اسناد XML

به منظور پردازش يک سند XML می توان از روش های مختلفی استفاده نمود . برخی از روش ها ، مبتنی بر تکنولوژی های سمت سرويس گيرنده و برخی ديگر مبتنی بر تکنولوژی های سمت سرويس دهنده بوده که پس از پردازش يک سند XML و ايجاد خروجی مناسب ، نتايج برای مرورگر ارسال می گردد . در اين رابطه می توان از امکانات ارائه شده به منظور انجام عمليات متفاوتی در ارتباط با اسناد XML نظير ويرايش يک سند و يا قابليت اشتراک آنان بين چندين سرويس دهنده ، استفاده نمود .
در اين مقاله قصد داريم با تاکيد بر تکنولوژی های سمت سرويس دهنده به نحوه تبديل اسناد XML در محيط دات نت اشاره نمائيم .
برای دستيابی به اسناد XML با استفاده از تکنولوژی های سمت سرويس گيرنده می توان از روش های متفاوتی استفاده نمود :
• اسناد XML مبتنی بر فايل : استفاده از فايل های XML و XSLT به عنوان ورودی و تبديل اسناد XML به XHTML به منظور نمايش توسط مرورگر
• اسناد XML مبتنی بر حافظه :استفاده از استاندارد Document Object Model )DOM ) به منظور دستيابی و پردازش اسناد XML
• اسناد XML مبتنی بر Stream : ارائه يک روش ساده به منظور خواندن و نوشتن اسناد XML که در هر لحظه يک عنصر توليد خواهد شد .
پردازش های سمت سرويس دهنده در محيط دات نت انجام می شود .مثلا" در روش دستيابی مبتنی بر فايل ، فريمورک دات نت يک کنترل سرويس دهنده را ارائه نموده است که با استفاده از يک فايل XML و يک فايل XSLT ، خروجی مناسب به منظور نمايش در صفحات وب توليد می گردد . در روش دستيابی مبتنی بر حافظه ، فريمورک دات نت امکانات لازم به منظور پردازش اسناد XML را متناسب با استاندارد DOM مربوط به کنسرسيوم وب ارائه نموده است . در روش دستيابی مبتنی بر Stream نيز کلاس های لازم به منظور خواندن و يا نوشتن اطلاعات در فايل های XML ارائه شده است .
در تمامی مثال هائی که در ادامه به بررسی آنان خواهيم پرداخت از فايل XML زير ( SrcoArticles.xml ) استفاده شده است . فايل فوق ، حاوی ليستی ساده از مقالات است .

 <?xml version="1.0" encoding="Utf-8"?>

  <Articles>

   <Article>
      <ID>111111</ID>
     <Name> XML در دانت : خواندنيک فايل</Name>
      <Description> نحوه خواندن يک فايلXML دردات نت</Description>
      <DatePublish>  28 / 7 / 1383 </DatePublish>
   </Article>

   <Article>
      <ID>222222</ID>
     <Name> XML در دانت : ايجاد يک فايل</Name>
      <Description> نحوه ايجاد يک فايلXML در دات نت</Description>
      <DatePublish> 24 / 7 / 1383 </DatePublish>
   </Article>

</Articles>

تبديل فايل های XML با استفاده از فايل های XSLT

استفاده از فايل های XSLT در ارتباط با فايل های XML بر روی سرويس دهنده محقق می گردد . يک تبديل XSLT ، با استفاده از يک کنترل سرويس دهنده <asp:xml> بر روی يک صفحه وب و در محل مورد نظر برای نمايش خروجی ، انجام می شود ( خروجی به صورت XHTML ) . برای کنترل فوق ، می بايست فايل های XML و XSLT را مشخص تا با استفاده از آنان خروجی مورد نظر توليد گردد .
کنترل <asp:xml> در محل مورد نظر به منظور نمايش خروجی در يک صفحه وب قرار می گيرد . کنترل فوق از دو خصلت به منظور مشخص نمودن فايل های XML و فايل XSLT استفاده می نمايد . شکل عمومی استفاده از کنترل فوق به صورت زير است :

 <asp:Xml DocumentSource="path" TransformSource="path" runat="server"/>

خصلت های DocumentSource و DocumentTransform به ترتيب مسير استقرار فايل های XML و XSLT را مشخص می نمايند .
فايل SrcoArticles.xsl که از آن به منظور تبديل فايل SrcoArticles.xml استفاده شده است :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

 <table border="1" dir="rtl" style="border-collapse:collapse">
    <tr style="background-color:#E6E6E6">
        <th>شماره سريال</th>
        <th>عنوان</th>
        <th>شرح</th>
         <th>تاريخ انتشار</th>
      </tr>

<xsl:apply-templates select="Articles/Article"/>

</table>

</xsl:template>

<xsl:template match="Article">
   <tr>
       <td><xsl:value-of select="ID"/></td>
       <td><xsl:apply-templates select="Name"/></td>
       <td><xsl:apply-templates select="Description"/></td>
       <td><xsl:value-of select="DatePubish"/></td>
    </tr>

</xsl:template>

</xsl:stylesheet>

استفاده از کنترل <asp:lable> در يک صفحه وب ASP.NET ( فايل XmlTransform1.aspx )

<script runat="server" language="vb">
Sub Page_Load()
      Message.Text = " تبديل يک سندXML با استفاده از کنترلasp:Xml"
End Sub
</script>

<html dir=rtl>
  <head>
     <title>تبديل يک سند</title>
</head>
<body>

 <form runat="server">
    <p align="center" style ="font-weight:bold">
     <asp:label id="Message" runat="server"/>  </p>
    <asp:Xml runat="server"
         DocumentSource="SrcoArticles.xml" 
         TransformSource="SrcoArticles.xsl"/>
 </form>

</body>
</html>

تبديل اسناد DOM با اسنتفاده از XSLT

فريمورک دات نت از اينترفيس استاندارد DOM کنسرسيوم وب حمايت می نمايد ، بنابراين می توان فايل های XML را به طور کامل و به عنوان يک سند DOM در حافظه مستقر نمود . با استقرار سند DOM در حافظه امکان دستيابی به تمامی ساختار سلسله مراتبی سند XML فراهم می شود . پس از استقرار يک سند DOM در حافظه و به موازات آن می توان يک XSLT style sheet را نيز درون سند DOM و به عنوان يک سند تبديل در حافظه مستقر نمود . بدين ترتيب شرايط لازم به منظور اعمال اسکريپت های مورد نظر به منظور تبديل يک سند DOM فراهم می گردد .
مثال : در اين مثال فايل SrcoArticles.Xml به عنوان يک سند DOM و فايل SrcoArticles.Xsl به عنوان يک سند تبديل در حافظه مستقر شده و در ادامه با استفاده از کنترل <asp:xml> و اسکريپت های نوشته شده ، عمليات تبديل انجام خواهد شد . به منظور تبديل فوق کنترل <asp:xml> از دو خصلت متفاوت می نمايد :
  • id.Document  : مرجعی به سند XML DOM 
  • id.Transform  مرجعی به سند تبديل XSLT 

خصلت Document به يک سند DOM ( يک سند XML که درون DOM لود شده است ) اشاره می نمايد . خصلت Transform به يک سند تبديل اشاره می نمايد ( يک فايل XSLT که به درون DOM لود شده است ) . برخلاف حالتی که خصلت های DocumentSource و TransformSource مستقيما" در کنترل <asp:xml> استفاده و به آنان مراجعه می گرديد ، از خصلت های فوق نمی توان به عنوان خصلت های همراه کنترل استفاده نمود . امکان بکارگيری خصلت های فوق صرفا" از طريق اسکريپت های مورد نظر امکان پذير می باشد . در چنين مواردی کنترل <asp:xml> می بايست دارای يک مشخصه خاص ( id ) باشد تا اسکريپت های مورد نظر با استفاده از آن قادر به انجام فرآيند تبديل باشد .

< asp:xml id="TransformOut" runat="server"/>

ايجاد يک سند DOM

به منظور استقرار يک فايل XML درون سرويس دهنده DOM در ابتدا می بايست يک شی XmlDocument ايجاد گردد . در ادامه با استفاده از شی ايجاد شده ، امکان استقرار سند XML در حافظه فراهم می گردد :

Dim document As XmlDocument
document = New XmlDocument
document.Load(path)

                              يا

Dim document = New XmlDocument()
document.Load(path)

متد Load شی XmlDocument يک فايل XML را به عنوان ورودی گرفته و آن را به صورت يک درخت در حافظه مستقر می نمايد ( يک نمايش درخت گونه از سند XML در حافظه ) . Path مسير فيزيکی به فايل XML را مشخص می نمايد . در چنين مواردی می توان از متد MapPath به منظور تبديل يک آدرس نسبی به مسير کامل فيزيکی نيز استفاده نمود .
XmlDocument يکی از اشياء قدرتمند در ارتباط با فايل های XML است که به برخی از ويژگی های مهم آن اشاره می گردد :
• مسئوليت پياد ه سازی اينترفيس استاندارد DOM مربوط به کنسرسيوم وب را برعهده دارد.( متعلق به System.Xml )
• استقرار يک سند XML در حافظه به صورت يک نمايش درختی
• امکان دستيابی به هر گره موجود در سند XML
• ارائه يک روش کاملا" انعطاف پذير به منظور دستيابی به هر گره مورد نياز در سند XML در مقايسه با اشياء XmlTextReader و XmlTextReader که صرفا" امکان دستيابی به صورت Forward only را فراهم می نمايند .
• خصلت ها و متدهای متعددی به منظور پردازش اسناد XML مستقر در حافظه را ارائه می نمايد .
• مهمترين نکته قابل تامل در خصوص اينترفيس DOM ، استقرار تمامی داده XML در حافظه است . بنابراين در صورت بالا بودن حجم سند XML ، حافظه زيادی مصرف می شود . در مواردی که با محدوديت حافظه مواجه هستيم می توان از روش های مبتنی بر Forward-only استفاده نمود .

ايجاد يک سند تبديل

از فرآيندی مشابه آنچه اشاره گريد به منظور استقرار يک XSLT style sheet در حافظه استفاده می گردد . در ابتدا يک شی XslTransform ايجاد شده و در ادامه اين شی از طريق يک فايل XSLT style sheet در حافظه مستقر می گردد .

 

Dim document As XslTransform
document = New XslTransform()
document.Load(path)

                        يا

Dim document = New XslTransform()
document.Load(path)

کدهای لازم به منظور تبديل

پس از استقرار دو سند مورد نظر در حافظه ، از سند XSLT به منظور تبديل سند XML DOM استفاده می گردد . در چنين مواردی خصلت های Transform و Document به کنترل <asp:Xml> نسبت داده شده و در ادامه ماحصل فرآيند تبديل که يک سند XHTML است از طريق کنترل نمايش داده می شود .

<%@ Import Namespace="System.Xml" %>
<%@ Import Namespace="System.Xml.Xsl" %>

<SCRIPT runat="server">

Sub Page_Load

   Dim SrcoXSL As New XslTransform()
   Dim SrcoDOM As New XmlDocument()

   SrcoDOM.Load(MapPath(" SrcoArticles.xml "))
   SrcoXSL.Load(MapPath(" SrcoArticles.xsl"))

   TransformOut.Document = SrcoDOM
   TransformOut.Transform =  SrcoXSL

End Sub

</SCRIPT>

<html dir=rtl>
<head>
<title>تبديل يک سند</title>
</head>
<body>

<form runat="server">
<p align="center" style ="font-weight:bold">
<asp:label id="Message" runat="server"/>  </p>
<asp:xml id="TransformOut" runat="server"/>
 </form>
</html >

از System.Xml به منظور ايجاد سند DOM و از System.Xml.Xsl به منظور ايجاد سند تبديل استفاده شده است .

عبارات ديگر تبديل

ترکيبات متفاوتی از خصلت های تبديل را می توان به همراه کنترل <asp:Xml> استفاده نمود . مثلا" می توان يک سند XML DOM را با استفاده از متد Load مربوط به شی XmlDocument در حافظه مستقر نمود و در ادامه يک فايل XSLT را در ارتباط با آن بکار گرفت . در چنين مواردی فايل XSLT با استفاده از خصلت TransformSource مربوط به کنترل <asp:xml> مشخص شده و سند DOM از طريق اسکريپت مورد نظر به خصلت Document مربوط به کنترل <asp:xml> نسبت داده می شود .

Dim SrcoDOM As New XmlDocument()
SrcoDOM.Load(MapPath(" SrcoArticles.xml "))
XMLControl.Document =SrcoDOM
 
<asp:xml id="XMLControl" TransformSource=" SrcoArticles.xsl" runat="server"/>

در روشی ديگر، می توان يک فايل XML را با استفاده از خصلت DocumentSource مربوط به کنترل <asp:xml> مشخص نمود و به موازات آن فايل XSLT را با استفاده از اسکريپت هائی که مقدار مورد نظر را به خصلت Transform نسبت می دهد ، استفاده نمود .

Dim SrcoDOM As New XmlDocument()
Dim SrcoXSL As New XslTransform()
SrcoXSL.Load(MapPath(" SrcoArticles.xsl"))
XMLControl.Transform = SrcoXSL
 
<asp:xml id="XMLControl" DocumentSource=" SrcoArticles.xml " runat="server"/>